|  [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser | 
|  [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser | 
|   
				 Post
					#1
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Projekt jest już na githubie pod adresem https://github.com/wookieb/bbcode Proszę o dodawanie informacji o bugach właśnie tam. UPDATE Wersja 1.2 [php bbcode, parser bbcode, advanced bbcode parser] Chciałbym dziś zaprezentować swój mechanizm parsujący kod bbcode oraz ułatwiający nam kontrolę nad tym czy tagi są prawidłowo używane. Klasa do pobrania: https://github.com/wookieb/bbcode/zipball/master Przykład działania: http://wookieb.pl/bbcode/test.php Readme.html w paczce oraz pod adresem http://wookieb.pl/bbcode/readme.html Licencja Skrypt wydany na licencji BSD. Dla własnego jak i komercyjnego użytku. Ustawienia parsera Ustawienia dla parsera znajdują się teraz w klasie BbCodeSettings. Ciekawsze z ustawień to Zaufany kod 
 Ustawienie kontroluje stopień sprawdzenia danych. Gdy kod bbcode sparsowaliśmy wcześniej to pobieramy jest wersję zaufaną i zapisujemy. 
 Przy ponownym odczytaniu kodu, możemy oznaczyć kod jak zaufany. Spowoduje to ominięcie wielu operacji kontroli atrybutów, przez co parsowanie jest szybsze. Kod $bbcode = new BbCode(); $text='[b] Bla Bla [i] Hehe'; $bbcode->parse($text, false); // nie chcemy wyniku wiec ustawiamy na false $code=$bbcode->getBbcode(); // [b] Bla Bla [i] Hehe[/i][/b] // $code zapisujemy // po pewnym czasie odczytujemy i parsujemy go jeszcze raz $bbcode->getSettings()->trustText = true; echo $bbcode->parse($code); Dostępność tagów Możliwe jest włączenie tylko niektórych tagów parsera Kod $bbcode = new BbCode(); $text = '[b]Pogrubienie[/b] [i]Kursywa[/i]'; echo $bbcode->parse($text); // <b>Pogrubienie</b> // <i>Kursywa</i> $bbcode->getSettings()->availableTags = array('b'); echo $bbcode->parse($text); // <b>Pogrubienie</b> // Kursywa Walidacja HTML (kolejności użycia) Domyślnie parser poprawia kolejność użycia tagów. np kod Kod [b] pogrubienie [i] Kursywa[/b] [ul] [li]Element listy [/b] [/i] Zamieni na Kod [b] pogrubienie [i] Kursywa[/i][/b] [ul] [li]Element listy[/li] [/ul] Tworzenie zajawek Parser potrafi tworzyć zajawke o odpowiedniej ilości znaków (ignorując przy tym tagi bbcode). Wspiera różne kodowania. Test pod adresem http://wookieb.pl/bbcode/cut_test.php Rozszerzanie możliwości Za pomocą tworzenia nowych tagów i dodawania ich specjalnych ustawień można rozszerzyć bbcode o dodatkowe tagi, możliwości. Szczególnie chciałbym zwrócić uwage na możliwość "przetrzepania" kodu przez funkcje filtrów, dzięki którym możemy tworzyć zaawansowane zależności. Informacje na temat ustawień dostępne pod linkiem http://wookieb.pl/bbcode/readme.html ZACHĘCAM DO OCEN, WNOSZENIA WŁASNYCH UWAG A TAKŻE PROPOZYCJI ZMIAN Mam nadzieję, że przyda się niejednej osobie, która dostrzeże możliwości użycia parsera NIE TYLKO do Bbcode (IMG:style_emoticons/default/smile.gif) i nie tylko. Update - 2009.05.31 Dodałem tag youtube do paczki. Inne zmiany: - poprawiony generowany kod html dla taga IMG - poprawiona metoda wyszukiwania nazwy taga - poprawiona szybkość działania - przeniesienie ustawień do BbCodeSettings - poprawiona walidacji urli - dodatkowe zabezpieczenia przed XSS Ten post edytował wookieb 23.08.2011, 19:46:20 
						Powód edycji: [wookieb]: [wookieb]: [Spawnm]: update
					 | 
|  | |
|  | 
|   
				 Post
					#41
					
				
			 | |
| Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 22.09.2009 Skąd: śląsk Ostrzeżenie: (0%)    | 
				no i na przykład do img nie dodajesz alt i nie zamykasz znacznika /> to się też nie waliduje w strict tak myślę, że przydała by się możliwość wyłączenia niektóych znaczników (bo teraz to nie wiem gdzie to zedytować?) i zamieniania nieznanych znaczników na '' (puste). np jak ktoś wpisze [ble]cos[/ble] -> cos (bez []) Ten post edytował lysiu 23.09.2009, 12:02:13 | 
|  | |
|   
				 Post
					#42
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | prawidłowo: (bbcode/filter/youtube.php) Zapomniałeś o części dość ważnych parametrów. Wrzucam tak jak każą. no i na przykład do img nie dodajesz alt i nie zamykasz znacznika /> to się też nie waliduje w strict Zaraz wrzucam nowa wersje to bedzie poprawione Cytat tak myślę, że przydała by się możliwość wyłączenia niektóych znaczników (bo teraz to nie wiem gdzie to zedytować?) i zamieniania nieznanych znaczników na '' (puste). np jak ktoś wpisze [ble]cos[/ble] -> cos (bez []) A pomyślaleś co będzie jak ktos bedzie chcial wpisac tekst, ktory jest miedzy nawiasami? np "Byłem u lekarz [tego na Przytockiej]" Ale oczywiscie mozna to zrobic. W nowej wersji linia 686 
 zamieniasz na 
 | 
|  | |
|   
				 Post
					#43
					
				
			 | |
| Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa  | |
|  | |
|   
				 Post
					#44
					
				
			 | |
| Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%)    | 
				Wszystko fajnie wygląda. Brakuje tylko integracji z Kohaną ;-)
				
				
				
			 | 
|  | |
|   
				 Post
					#45
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				A co za problem zintegrować to samemu? A dlaczego phpmailer nie jest zintegrowany z kohana, albo z ZF? Integrujcie sobie gdzie chcecie.
				
				
				
			 | 
|  | |
|   
				 Post
					#46
					
				
			 | |
| Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%)    | 
				Swift jest zintegrowany w kohana.  Z tą integracją żartowałem. Fajnie napisana biblioteka (IMG:style_emoticons/default/smile.gif) Implementował ktoś Geshi dla [code] ? Coś u mnie nie interpretuje tego jak powinien. Wychodzi kod potraktowany jakby htmlspecialchars. htmlspecialchars_decode nic nie pomaga ... hmm.. Jeśli formatuje kod np. java jest ok. Jeśli zaś formatuje kod jako php oraz posiada znaczniki <?php ... ?> nie interpretuje tego dobrze, nie wyświetla nawet textarea geshi. Natomiast kod php bez znaczników <?php, ?> wyświetla okno textarea geshi, z tym że nie interpretuje kodu. | 
|  | |
|   
				 Post
					#47
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Pokaż jak zaimplementowałeś geshi.
				
				
				
			 | 
|  | |
|   
				 Post
					#48
					
				
			 | |
| Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%)    | 
				Mam dwa pytania. 1. Jest jakaś opcja dostarczenia do tego parsera listy dozwolonych tagów? 2. Jeśli istnieje taka lista to jak do pozostałych tagów dodawać spację np. użytkownik poda <nowy_tag>, chcę uzyskać < nowy_tag. Chodzi o to, aby nie traktował błędnego tagu jako kod html. | 
|  | |
|   
				 Post
					#49
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				1) A readme.html czytał? 2) Opcje leave_* opisane w manualu, dokumentacja BbCodeSettings również się kłania. | 
|  | |
|   
				 Post
					#50
					
				
			 | |
| Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 12.10.2008 Ostrzeżenie: (0%)    | 
				przyda się (IMG:style_emoticons/default/smile.gif)  użyję w swoim skrypcie | 
|  | |
|   
				 Post
					#51
					
				
			 | |
| Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%)    | 
				Jeszcze jedno pytanie. Da się zrobić odwrotną konwersję, czyli html->bbcode ?
				
				
				
			 | 
|  | |
|   
				 Post
					#52
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Tak da się tworząc filtry odwrotne. Aczkolwiek takiej możliwości jeszcze nie udostępniłem.
				
				
				
			 | 
|  | |
|   
				 Post
					#53
					
				
			 | |
| Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%)    | 
				nie wiem czy to tylko u mnie, czy znalazłem buga jeśli w parsowanym kodzie jest link powiedzmy http://www.wp.pl/cos to przestaje działać dodawanie <br/> w znakach nowej linii (IMG:style_emoticons/default/biggrin.gif) więc pytanie, co jest nie tak, bądź jak zdebugować to. PS: Mam klasę zintegrowaną z Kohaną, sam do końca nie wiem czy poprawnie | 
|  | |
|   
				 Post
					#54
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				@Zdunek Poprawiłem błąd, Dzięki za info (IMG:style_emoticons/default/smile.gif) 
				
				
				
			 | 
|  | |
|   
				 Post
					#55
					
				
			 | |
| Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%)    | @Zdunek Poprawiłem błąd, Dzięki za info (IMG:style_emoticons/default/smile.gif)  no i znowu będę musiał integrować z Kohaną (IMG:style_emoticons/default/tongue.gif) Jeśli możesz powiedzieć jakie linijki są do zmiany, będę bardzo wdzięczny | 
|  | |
|   
				 Post
					#56
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Linia 1233
				
				
				
			 | 
|  | |
|   
				 Post
					#57
					
				
			 | |
| Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%)    | Linia 1233 dzięki znalazłem już następny błąd link na przykładzie http://www.1980-games.com/us/old-games/nin...3;/big-game.php po !/ przestaje być linkiem Edit: przy autolinkowaniu nie działają także linki typu http://www.radareklamy.org/uchwala,163.html ucina przy przecinku Ten post edytował Zdunek 5.11.2009, 21:51:13 | 
|  | |
|   
				 Post
					#58
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Wielkie dzięki (IMG:style_emoticons/default/smile.gif)  Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu (IMG:style_emoticons/default/smile.gif) Poprawki: Url.php (98) DataValidator.class.php (141) Oczywiście + za doraźną pomoc (IMG:style_emoticons/default/smile.gif) | 
|  | |
|   
				 Post
					#59
					
				
			 | |
| Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%)    | Wielkie dzięki (IMG:style_emoticons/default/smile.gif)  Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu (IMG:style_emoticons/default/smile.gif) Oczywiście + za doraźną pomoc (IMG:style_emoticons/default/smile.gif) To ja dziękuję za parser (IMG:style_emoticons/default/winksmiley.jpg) mam jeszcze pytanko, jak zrobić by zajawka była bez znaczników bb ale by ten kod nie miał także htmla, tz. był tylko bez bbcode ? Edit: chyba jednak ciągle jest błąd http://www.radareklamy.org/uchwala,163.html + tekst wywala takie coś ";/null" (IMG:style_emoticons/default/biggrin.gif) | 
|  | |
|   
				 Post
					#60
					
				
			 | |
| Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk  | 
				Przetestowałem link i jest ok. Proszę upewnij się czy na pewno masz poprawną wersję. Chodzi tylko o wyrażenia regularne więc mogło ci sie coś pomotać, albo coś nadpisałeś (IMG:style_emoticons/default/smile.gif)  Cytat mam jeszcze pytanko, jak zrobić by zajawka była bez znaczników bb ale by ten kod nie miał także htmla, tz. był tylko bez bbcode ? Chodzi ci o sam czysty tekst? Jeżeli tak to aktualnie nie brałem takiej opcje pod uwagę (a może faktycznie się przydać). Aczkolwiek możesz to uczynić trochę okrężną drogą. Pobrać zajawkę i wywalić z niej html, pomyślę nad tym. | 
|  | |
|   | 
|   | Aktualny czas: 26.10.2025 - 02:29 |